//
// uml@J, UML annotations for Java
//
// Copyright (C) 2010 Laurent Legrand or third-party contributors as
// indicated by the @author tags or express copyright attribution
// statements applied by the authors.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//

/**
 * 
 */
package org.umlatj.internal.behavior;

import org.umlatj.behavior.OpaqueBehavior;
import org.umlatj.internal.kernel.KClassifier;
import org.umlatj.internal.reflect.Types;


public class OpaqueBehaviorBuilder extends BehaviorBuilder<KOpaqueBehavior> {

	public OpaqueBehaviorBuilder() {
		super(OpaqueBehavior.class);
	}

	public KOpaqueBehavior newBehavior(Class<?> type) {
		KClassifier classifier = Types.asClassifier(type);

		KOpaqueBehavior behavior = new KOpaqueBehavior(classifier.getType());
		OpaqueBehavior opaqueBehavior = type.getAnnotation(OpaqueBehavior.class);
		if (opaqueBehavior.preConditions().length() != 0) {
			behavior.setPreConditions(classifier.getConstraintBuilder().build(
			        opaqueBehavior.preConditions()));
		}
		if (opaqueBehavior.postConditions().length() != 0) {
			behavior.setPostConditions(classifier.getConstraintBuilder().build(
			        opaqueBehavior.postConditions()));
		}
		return behavior;
	}

}